# -*- coding: utf-8 -*-

from django.http import HttpResponse
from django.shortcuts import render_to_response
from django.db.models import Q
from django.contrib.auth.models import User
from django.views.decorators.csrf import csrf_exempt
from django.template import Context, RequestContext, loader
from datetime import datetime, date

import json
from atendimento_cliente.models import Chamado, TipoChamado, OPCOES_STATUS

@csrf_exempt
def getUserType(request):
    #import pdb; pdb.set_trace()
    user_name = request.POST['user_name']
    user_type = ''
    
    user = User.objects.get(username = user_name)
    groups = user.groups.all()
    for i in groups:
        if i.name == 'Cliente':
            user_type = 'cliente'
        elif i.name == 'Atendente':
            user_type = 'atendente'
        elif i.name == 'Administrador':
            user_type = 'administrador'
        else:
            pass
        
    jsonString = json.dumps(user_type, indent = 2)
    return HttpResponse(jsonString)

@csrf_exempt
def gerarRelatorio(request):
    #TODO
    #verificar se requisicao vem de administrador
    #import pdb; pdb.set_trace()
    #verificar se requisicao provem de administrador
    #se sim, redirecionar para página com form de relatorio
    #se nao, redirecionar para página do change_form.html
    atendentes = User.objects.filter(groups__name='Atendente')
    tipos = list(TipoChamado.objects.all())
    
    #atendentes
    ids = []
    nomes = []
    for i in atendentes:
        nome = i.first_name + ' ' + i.last_name
        ids.append(i.id)
        nomes.append(nome)
    att_zipped = zip(ids,nomes)
    
    
    #status
    valores = []
    nomes = []
    for i in OPCOES_STATUS:
        valores.append(i[0])
        nomes.append(i[1])
    status_zipped = zip(valores,nomes)
    
    return render_to_response('gerarRelatorio.html',
                              {'atendentes':att_zipped, 'tipos':tipos, 'status':status_zipped},
                              context_instance=RequestContext(request))

@csrf_exempt
def exibirRelatorio(request):
    #TODO
    #verificar se usuario logado tem permissao
    #import pdb; pdb.set_trace()
    report_dict = {}
    
    chamados = Chamado.objects.all()
    
    post = request.POST
    status = post['status']
    for i in OPCOES_STATUS:
        if i[0] == status:
            status = i[1]
            break
    tipo = post['tipo']
    
    if tipo != '0':
        chamados = chamados.filter(tipo=tipo)
    
    if status != '0':
        chamados = chamados.filter(status=status)
    
    #atendente = post['atendente']
    inabert = post['inicioabertura']
    if inabert != '':
        chamados = chamados.filter(Q(abertura__gte=datetime.strptime(inabert,"%Y-%m-%d").date()))
    fimabert = post['fimabertura']
    if fimabert != '':
        chamados = chamados.filter(Q(abertura__lte=datetime.strptime(fimabert,"%Y-%m-%d").date()))
    inatt = post['inicioatt']
    if inatt != '':
        chamados = chamados.filter(Q(atualizacao__gte=datetime.strptime(inatt,"%Y-%m-%d").date()))
    fimatt = post['fimatt']
    if fimatt != '':
        chamados = chamados.filter(Q(atualizacao__lte=datetime.strptime(fimatt,"%Y-%m-%d").date()))
    infech = post['iniciofechamento']
    if infech != '':
        chamados = chamados.filter(Q(fechamento__gte=datetime.strptime(infech,"%Y-%m-%d").date()))
    fimfech = post['fimfechamento']
    if fimfech != '':
        chamados = chamados.filter(Q(fechamento__lte=datetime.strptime(fimfech,"%Y-%m-%d").date()))
        
    eststatus = post.get('estatisticastatus',False)
    if eststatus:
        abertos = len(Chamado.objects.filter(status = '1'))
        respondidos = len(Chamado.objects.filter(status = '2'))
        fechados = len(Chamado.objects.filter(status = '3'))
        totalstatus = int(abertos) + int(fechados) + int(respondidos)
        
        report_dict['abertos'] = abertos
        report_dict['respondidos'] = respondidos
        report_dict['fechados'] = fechados
        report_dict['totalstatus'] = totalstatus
    else:
        report_dict['totalstatus'] = None
        
    #estatendente = post.get('estatisticaatendente',False)
    estatipo = post.get('estatisticatipo',False)
    if estatipo:
        for i in TipoChamado.objects.all():
            if i.nome == u"Dúvida":
                duvidas = len(Chamado.objects.filter(tipo = i.id))
            if i.nome == u"Sugestão":
                sugestoes = len(Chamado.objects.filter(tipo = i.id))
            if i.nome == u"Pedido":
                pedidos = len(Chamado.objects.filter(tipo = i.id))
            if i.nome == u"Reclamação":
                reclamacoes = len(Chamado.objects.filter(tipo = i.id))
        totaltipo = int(duvidas) + int(pedidos) + int(reclamacoes) + int(sugestoes)
        
        report_dict['duvidas'] = duvidas
        report_dict['sugestoes'] = sugestoes
        report_dict['pedidos'] = pedidos
        report_dict['reclamacoes'] = reclamacoes
        report_dict['totaltipo'] = totaltipo
    else:
        report_dict['totaltipo'] = None

    if chamados:
        report_dict['chamados'] = chamados
    else:
        report_dict['chamados'] = None


    #processar dados enviados atraves do form, buscar as informacoes no banco
    #organizar as infos em uma estrutura de dados e redirecionar para pagina de exibicao de relatorio
    return render_to_response('exibirRelatorio.html',
                              report_dict,
                              context_instance=RequestContext(request))
            
    